package com.conselheiro.web.beans;

import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.apache.log4j.Logger;

import com.conselheiro.web.entidade.enumeration.Genero;
import com.conselheiro.web.exception.CadastroException;

@ManagedBean
public class CadastroBean extends AbstractBean {

	private static final long serialVersionUID = -3127087158543483847L;
	private Logger logger = Logger.getLogger(getClass());
	private String senha;
	private Date dataNascimento;
	private String nome;
	private String sobrenome;
	private String email;
	private Genero genero;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Genero getGenero() {
		return genero;
	}

	public void setGenero(Genero genero) {
		this.genero = genero;
	}

	public String cadastrar() {
		try {
			getFachada().cadastrar(getSenha(), getNome(), getSobrenome(),
					getEmail(), getDataNascimento(), getGenero());
		} catch (CadastroException e) {
			logarErro(logger, e.getMessage(), e);
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "O usuário "
							+ getEmail() + " já foi cadastrado", ""));
			return "/index";
		}
		getFachada()
				.notificarNovoUsuario(getEmail(), getNome(), getSobrenome());
		FacesContext.getCurrentInstance().addMessage(
				null,
				new FacesMessage(FacesMessage.SEVERITY_INFO,
						"Usuário cadastrado com sucesso. Utilize o email "
								+ getEmail() + " para acessar o sistema", ""));
		logarInfo(logger, "Cadastro realizado: " + getEmail());
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put(AUTH_KEY_LOGIN, getEmail());
		logarInfo(logger, "LOGIN REALIZADO");
		reset();
		return "/restrito/index?faces-redirect=true";
	}

	private void reset() {
		setDataNascimento(null);
		setEmail(null);
		setNome(null);
		setSenha(null);
		setSobrenome(null);
		setGenero(null);
	}

}
